// let set = new Set()
// set.add(5)
// set.add('5')
// set.add('5')
// set.add('5')
// set.add('5')
// console.log(set.size) // 2

// let set = new Set([1, 1, 1, 2, 2, 2, 3, 3, 3])
// console.log(Array.from(set)) // [ 1, 2, 3 ]

// let set = new Set()
// set.add(5)
// set.add(10)
// set.forEach((value, key, ownerSet) => {
//   console.log(value)
//   console.log(key)
//   console.log(ownerSet === set)
//   console.log('=============')
// })
// 5
// 5
// true
// =============
// 10
// 10
// true
// =============

// let set = new Set([1, 1, 1, 2, 2, 2, 3, 3, 3])
// console.log([...set]) // [ 1, 2, 3 ]
// console.log(Array.from(set)) // [ 1, 2, 3 ]

// let set = new Set()
// let obj = {}
// set.add(obj)
// obj = null
// console.log(set.size) // 1


// let map = new Map()
// map.set('title', 'hello es6')
// map.set('year', '2022')

// console.log(map.get('title')) // hello es6

// console.log(map.has('title')) // true

// map.delete('year')

// console.log(map.size) // 1

// map.clear()

// console.log(map.size) // 0

// let map = new Map([['title', 'hello es6'], ['year', '2022']])

// map.forEach((value, key, ownerMap) => {
//   console.log(value)
//   console.log(key)
//   console.log(ownerMap)
//   console.log('========')
// })
// hello es6
// title
// Map { 'title' => 'hello es6', 'year' => '2022' }
// ========
// 2022
// year
// Map { 'title' => 'hello es6', 'year' => '2022' }
// ========

// let map = new WeakMap()
// let element = document.querySelector('.element')

// map.set(element, 'Original')

// let value = map.get(element)
// console.log(value) // Original

// // 移除element元素
// element.parentNode.removeChild(element)
// element = null

// // 此时 WeakMap 集合为空

let Person = (function () {
  let privateData = new WeakMap()
  function Person (name) {
    privateData.set(this, { name, name })
  }
  Person.prototype.getName = function () {
    return privateData.get(this).name
  }
  return Person
})()

const person = new Person('李四')
console.log(person.name) // undefined
console.log(person.getName()) // 李四


